package com.lxw.question;

import java.util.*;

public class Q04 {
    /**
     * 题目描述
     * 给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
     *
     * 说明：解集不能包含重复的子集。
     */

    public static List<List<Integer>> subsets1(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        if(nums == null || nums.length == 0){
            return result;
        }

        Set<List<Integer>> result0 = new HashSet<>();

        //对数组进行排序


        result0.add(new ArrayList<Integer>());


        for(int i = 1 ; i <= nums.length ; i++){
            //i=1表示每一个元素组成一组
            //执行分组，加入
            for(int j = 0 ; j < nums.length ; j++) {
                if (j + i > nums.length) {
                    break;
                }
                int temp = 0;
                List<Integer> data = new ArrayList<Integer>();
                for (int k = j; k < j + i; k++) {
                    data.add(nums[k]);
                    temp++;
                }
                result0.add(data);
            }
            System.out.println(i);
        }
        return new ArrayList<List<Integer>>(result0);
    }

    public static void main(String[] args){
        long startTime = System.currentTimeMillis();
        int[] nums = new int[10];
        for(int i = 0 ; i < 10 ; i++){
            nums[i] = i;
        }
        List<List<Integer>> result = subsets(nums);
        long endTime = System.currentTimeMillis();
        System.out.println("耗时:"+(endTime - startTime));
        System.out.println(result);
    }

    public static List<List<Integer>> subsets(int[] nums){
        List<List<Integer>> result = new ArrayList<>();
        result.add(new ArrayList<Integer>());

        for(int i = 0 ; i < nums.length ; i++){
            int all = result.size();

            for(int j = 0 ; j < all ; j++){
                List<Integer> sub = new ArrayList<>(result.get(j));
                sub.add(nums[i]);
                result.add(sub);
            }
            System.out.println(i);
        }
        return result;
    }
}
